const log = require('./utils/log')
const config = require('./config')

/**
 * 微信api调取所需 登陆态
 * @returns {Promise<void>}
 */
const wxLogin = async function () {
  const wxLogin = new Promise((resolve, reject) => {
    wx.login({
      success (res) {
        resolve(res.code)
      },
      fail (error) {
        reject(error)
      }
    })
  })
  if (wx.getStorageSync(config.tokenName)) return
  const code = await wxLogin
  // todo 这里调取登录接口进行登录
  wx.setStorageSync(config.wxLoginName, JSON.stringify(null))
}

/**
 * 更新 app
 */
const updateApp = function () {
  const updateManager = wx.getUpdateManager()
  updateManager.onCheckForUpdate((res) => {
    this.log.info(res.hasUpdate)
  })
  updateManager.onUpdateFailed(() =>{
    this.log.error(res.hasUpdate)
  })
  updateManager.onUpdateReady(function () {
    wx.showModal({
      title: '更新提示',
      content: '新版本已经准备好，是否重启应用？',
      success(res) {
        if (!res.confirm) return
        updateManager.applyUpdate()
      }
    })
  })
}

App({
  onLaunch () {
    updateApp.call(this)
    wx.onNetworkStatusChange(res => {
      if (!res.isConnected) {
        wx.showToast({
          title: '网络似乎已经断开了~~~',
          icon: 'none'
        })
      }
    })
  },
  data: {},
  log,
  wxLogin,
  /**
   * 全局 脚本异常处理
   * @param error
   */
  onError (error) {
    this.log.error('[global onError]', error)
    console.error('[global onError]', error)
  },
  /**
   * 全局 Promise reject 未捕获异常处理
   * @param error
   */
  onUnhandledRejection (error) {
    this.log.error('[global onUnhandledRejection]', error)
    console.error('[global onUnhandledRejection]', error)
  }
})
